<?php
/**
 * 搜索控制器
 */

class SearchController extends CommonController {

	public function index() {
		//搜索的关键字
		$keywords = Q('get.searchkey');

		$this -> getFilter($keywords);

		$this -> display();
	}

	/**
	 * 获得所有的子分类下面的商品 GID  对商品进行筛选
	 * 1、先获得所有商品ID
	 * 2、再获得相应分类下面的所有商品的属性去重
	 * 3、再获得相应商品属性的属性 属性头
	 *
	 */
	private function getFilter($keywords) {

		//所有分类的CIDS
		//获得所有的商品GID
		$gids = K('goods') -> where("goods_name LIKE '%{$keywords}%'") -> getField('gid', true);
		
		if ($gids) {
			//获得当前商品的所有类开属性和规格属性 还要相应的规格
			$attrids = K('GoodsAttr') -> where('goods_gid in (' . implode(',', $gids) . ')') -> group('attr_value') -> order('attid DESC') -> all();
			
			//			var_dump($attrids);
			//将相同的类型属性ID的属性放在一个子数组中
			foreach ($attrids as $v) {
				$tempFinal[$v['typeattr_id']][] = $v;
			}
			//获得属性头名 组合为一个新的数组
			$tempFinalArr = array();
			foreach ($tempFinal as $typetid => $value) {
				$tempFinalArr[] = array('name' => K('TypeAttr') -> where('id=' . $typetid) -> getField('attrname'), 'value' => $value);
			}
			//			p($tempFinalArr);
			//将当前分类中的属性分配到模板
			$this -> assign('attrlist', $tempFinalArr);
			//参数问题
			//实现param/0_0_0_0_0_0 有几列行属性就有几个0
			//统计有几行属性
			$count = count($tempFinalArr);

			//使用一个数据来填充$count个0  如果没有传入任何参数那么表示为 查询当前分类下所有的商品
			$param = isset($_GET['param']) ? explode('_', $_GET['param']) : array_fill(0, $count, 0);
			//			var_dump($param);
			$this -> assign('param', $param);
			
			$gidStr = "'".implode("','",$gids)."'";
			foreach($param as $attid){
				if ($v) {
					//获得存在有此属性的商品
					$paramGids[] = M() -> join('__goods_attr__ g1 JOIN __goods_attr__ g2 ON g1.attr_value=g2.attr_value') -> where("g1.attid={$attid} AND g2.goods_gid in ({$gidStr})") -> getField('g2.goods_gid', true);
				}
			}
//			p($paramGids);
			//做一个交集合并
			$tmp = $paramGids[0]; 
			$finalGoodsGid = array();
			foreach($paramGids as $kk=>$gids){
				//跳过为空的
				if(empty($gids)){
					unset($paramGids[$kk]);
				}else{
					$finalGoodsGid[] = $gids;	
				}
			}
			
			//当筛选条件都不为0的时候
			if($finalGoodsGid){
				//取一个最终的Gid
				$tmp2 = $finalGoodsGid[0];
				foreach($finalGoodsGid as $vv){
					$tmp2 = array_intersect($tmp2, $vv);
				}
				$findGid = "'".implode("','",$tmp2)."'";
				$goods = K('Goods')->where("gid in({$findGid})")->all();
				
				if (Q('get.isnew', 0, 'intval')) {
					usort($goods,'isnew');
				} elseif (Q('get.pricehight', 0, 'intval')) {
					//按高价排序
					usort($goods,'pricehight');
				} elseif (Q('get.pricelowe', 0, 'intval')) {
					//按低价排序
					usort($goods,'pricelow');
				}
				$this->assign('goods',$goods);
				
				
			}else{
				//当筛选条件都为0的时候
				$goods = K('Goods')->where("goods_name LIKE '%{$keywords}%'")->all();
				if (Q('get.isnew', 0, 'intval')) {
					usort($goods,'isnew');
				} elseif (Q('get.pricehight', 0, 'intval')) {
					//按高价排序
					usort($goods,'pricehight');
				} elseif (Q('get.pricelowe', 0, 'intval')) {
					//按低价排序
					usort($goods,'pricelow');
				}
				$this->assign('goods',$goods);
				
			}
			
			
			//当不存在参数的筛选参数的时候直接显示所有的搜索到的商品中
			if(!isset($_GET['param'])){
				$goods = K('Goods')->where("goods_name LIKE '%{$keywords}%'")->all();
				if (Q('get.isnew', 0, 'intval')) {
					usort($goods,'isnew');
				} elseif (Q('get.pricehight', 0, 'intval')) {
					//按高价排序
					usort($goods,'pricehight');
				} elseif (Q('get.pricelowe', 0, 'intval')) {
					//按低价排序
					usort($goods,'pricelow');
				}
				$this->assign('goods',$goods);
			}

		}
				
	}

}
